﻿using System;
using System.ComponentModel;
using System.Windows.Forms;
using Agenda.Model.Entities;

namespace Agenda
{
    public partial class FormEndereco : Form
    {
        #region Construtor

        private FormEndereco()
        {
            InitializeComponent();
        }

        public FormEndereco(EnderecoAgenda enderecoAgenda) : this()
        {
            // Configura Campo
            this._EnderecoAgenda = enderecoAgenda;

            // Configura Binding Source
            this.bindingSource1.DataSource = this._EnderecoAgenda;
            
            // Verifica se já há um Endereço Marcado para a Exclusão
            if (this._EnderecoAgenda.IsDeleted)
            {
                // Exibe MessageBox
                MessageBox.Show("O contato atual já possui um endereço marcado para exclusão e este será recuperado.",
                                "Edição de endereço", MessageBoxButtons.OK, MessageBoxIcon.Information);
                
                // Restaura o Estado de Exclusão
                this._EnderecoAgenda.CleanDeleted();
            }
        }

        #endregion

        #region Campos

        private bool _AcaoCancelada = false;

        /// <summary>
        /// Contém a Referência do Endereço de Agenda Atual
        /// </summary>
        private EnderecoAgenda _EnderecoAgenda;

        #endregion

        #region Eventos

        private void toolStripButtonSalvar_Click(object sender, EventArgs e)
        {
            // Aceita as Modificações
            this.bindingSource1.EndEdit();

            // Fecha a Janela
            this.Close();
        }

        private void toolStripButtonCancelar_Click(object sender, EventArgs e)
        {
            // Configura a Flag para não Exibir a MessageBox
            this._AcaoCancelada = true;
            
            // Fecha a Janela (O BindingSource irá realizar o CancelEdit Automaticamente)
            this.Close();
        }

        private void toolStripButtonExcluir_Click(object sender, EventArgs e)
        {
            // Cria Objetos
            DialogResult result;

            // Exibe Confirmação de Exclusão
            result = MessageBox.Show("Deseja prosseguir com a exclusão do endereço atual?", "Exclusão de Endereço",
                                     MessageBoxButtons.YesNo, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2);

            // Verifica Resultado
            if (result == DialogResult.Yes)
            {
                // Marca para Deleção
                this._EnderecoAgenda.MarkDeleted();

                // Fecha a Janela (O BindingSource irá realizar o CancelEdit Automaticamente)
                this.Close();
            }
        }

        ///<summary>
        ///Raises the <see cref="E:System.Windows.Forms.Form.Closing"></see> event.
        ///</summary>
        ///
        ///<param name="e">A <see cref="T:System.ComponentModel.CancelEventArgs"></see> that contains the event data. </param>
        protected override void OnClosing(CancelEventArgs e)
        {
            // Verifica se pode exibir a Mensagem
            if (! this._AcaoCancelada)
            {
                // Emite Mensagem
                MessageBox.Show("As alterações realizadas só serão persistidas quando o contato for salvo.",
                                "Edição de endereço", MessageBoxButtons.OK, MessageBoxIcon.Information);
                
            }
            
            base.OnClosing(e);
        }      
        
        #endregion
    }
}